﻿#ifndef _FITK_ACOUSTICS_ABSTRACT_NCT_H___
#define _FITK_ACOUSTICS_ABSTRACT_NCT_H___

#include "FITKAcousticsPhysicsAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractNDataObject.h"
#include "FITK_Kernel/FITKCore/FITKAbstractDataManager.hpp"
#include "FITK_Kernel/FITKCore/FITKCoreMacros.h"

namespace Acoustics
{
    /**
     * @brief 声学包对象抽象类
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-10-21
     */
    class FITKAcousticsPhysicsAPI FITKAcousticsAbsNCT : public Core::FITKAbstractNDataObject
    {
        Q_OBJECT
    public:
        /**
         * @brief 声学包类型
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-21
         */
        enum NCTType
        {
            None,                  ///< 无
            TreatmentLayUp,        ///< 多层声学包
            UserDefTreatment,      ///< 用户自定义声学包
            MulitipleNCT,          ///< 多重声学包
        };


    public:
        /**
         * @brief Construct a new FITKAcousticsAbsNCT object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-21
         */
        explicit FITKAcousticsAbsNCT() = default;
        /**
         * @brief Destroy the FITKAcousticsAbsNCT object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-21
         */
        virtual ~FITKAcousticsAbsNCT() = 0;
        /**
         * @brief 获取声学包类型
         * @return NCTType 
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-21
         */
        virtual NCTType getNCTType() = 0; 
        /**
         * @brief 设置颜色，归一化表示
         * @param[i] r,g,b  颜色rgb值，范围是0.0-1.0
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-06
         */
        void setColor(float r, float g, float b);
        /**
         * @brief 获取颜色，归一化表示
         * @param[o] rgb  颜色rgb值，三个分量，范围是0.0-1.0
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-10-06
         */
        void getColor(float* rgb);

    private:
        /**
         * @brief 颜色
         * @author liuzhiyuan(liuzhiyuan@diso.cn)
         * @date 2024-11-07
         */
        float _color[3] = { 0.18f, 0.63f, 0.36f };
    
    };
    /**
     * @brief 声学包管理器
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-10-21
     */
    class FITKAcousticsPhysicsAPI FITKAcousticsNCTManager : public Core::FITKAbstractDataObject
            , public Core::FITKAbstractDataManager<FITKAcousticsAbsNCT>
    {
        FITKCLASS(Acoustics,FITKAcousticsNCTManager);
    public:
        /**
         * @brief Construct a new FITKAcousticsNCTManager object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-21
         */
        explicit FITKAcousticsNCTManager() = default;
        /**
         * @brief Destroy the FITKAcousticsNCTManager object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-21
         */
        virtual ~FITKAcousticsNCTManager() = default;
         /**
          * @brief 根据类型获取声学包
          * @param[i]  t             声学包类型
          * @return QList<FITKAcousticsAbsNCT*> 
          * @author LiBaojun (libaojunqd@foxmail.com)
          * @date 2024-10-21
          */
        virtual QList<FITKAcousticsAbsNCT*> getAcousticsNCTByType(FITKAcousticsAbsNCT::NCTType t);

    };
}


#endif
